#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
主题: 迭代器代替while无限循环
问题: 你在代码中使用 while 循环来迭代处理数据，因为它需要调用某个函数或者和一般迭代模式不同的测试条件。 
    能不能用迭代器来重写这个循环呢？
提示 : 
"""

CHUNKSIZE = 8192

def reader(s):
    '''一个常见的IO操作程序'''
    while True:
        data = s.recv(CHUNKSIZE)
        if data == b'':
            break
        # ...

def reader2(s):
    for _ in iter(lambda: s.recv(CHUNKSIZE), b''):
        pass        # NOSONAR
    # ...

def recipe1():
    '''
    iter 函数一个鲜为人知的特性是它接受一个可选的 callable 对象和一个标记(结尾)值作为输入参数。 
    当以这种方式使用的时候，它会创建一个迭代器， 这个迭代器会不断调用 callable 对象直到返回值和标记值相等为止。
    '''
    import sys
    f = open('../hosts.txt')
    for chunk in iter(lambda: f.read(10), ''): # 一次读取10字符
        sys.stdout.write(chunk)     

def main():
    print('recipe1'.center(20, '*'))
    recipe1()

if __name__ == '__main__':
    main()        